<?php
  /*

   */

  /* ============================
   Liste des variables attendues
   ------------------------------
   POST ACTION_ITEM       = ADD|ADD_TAG|DEL_TAG|INV_TAG|UP_NOM|MOD_DROITS|PUBLIC|DEL
   POST ID_ITEM           = int
   POST NOM_TAG_ITEM      = string
   POST NOM_ITEM          = string
   POST NEW_NOM_ITEM      = string
   POST DROITS_ITEM       = int
   POST TAGS_ITEM         = array
   POST FICHIER           = file
   POST FICHIERL          = string
   POST LOGIN_DROITS_ITEM = string
   =========================== */

$action     = (!empty($_POST['ACTION_ITEM']))       ? cleanVar($_POST['ACTION_ITEM'])       : null;
$id         = (!empty($_POST['ID_ITEM']))           ? cleanVar($_POST['ID_ITEM'],true)      : null;
$nomTag     = (!empty($_POST['NOM_TAG_ITEM']))      ? cleanVar($_POST['NOM_TAG_ITEM'])      : null;
$nomItem    = (!empty($_POST['NOM_ITEM']))          ? cleanVar($_POST['NOM_ITEM'])          : null;
$newNomItem = (!empty($_POST['NEW_NOM_ITEM']))      ? cleanVar($_POST['NEW_NOM_ITEM'])      : null;
$tagsItem   = (!empty($_POST['TAGS_ITEM']))         ? cleanVar($_POST['TAGS_ITEM'])         : null;
$fichier    = (!empty($_FILES['FICHIER']))          ? $_FILES['FICHIER']                    : null;
$fichierL   = (!empty($_POST['FICHIERL']))          ? cleanVar($_POST['FICHIERL'])          : null;
$leLogin    = (!empty($_POST['LOGIN_DROITS_ITEM'])) ? cleanVar($_POST['LOGIN_DROITS_ITEM']) : null;
$valDroits  = (!empty($_POST['DROITS_ITEM']))       ? cleanVar($_POST['DROITS_ITEM'],true)  : null;


$fichierLien = false;
if(empty($fichier['name']))
  {
    $fichier     = $fichierL;
    $fichierLien = true;
  }

$lienItem  = $proprietaireItem = null;
$nbrAction = 0;
$uploaded  = false;
$admin     = (bool)$_SESSION['IS_ADMIN'];

try
{
  // DROITS: si il est identifié
  if(!isset($_SESSION['IDENTIFICATION_OK']))
    {
      throw new ListerException(201);
    }

  if(!is_array($tagsItem))
    {
      $tagsItem = cleanVar(explode(',', $tagsItem));
    }

  // ajouter un item
  if($action == 'ADD' && !is_null($fichier))
    {
      // DROITS: ajouter un item: si il a le droits d'uploader
      if($_SESSION['IS_UPLOADER'] === false && !$admin)
	{
	  throw new ListerException(203);
	}

      $id = 0;

      if($fichierLien === true)
	{
	  $nomItem  = is_null($nomItem) ? trNomFichier($fichier) : $nomItem;
	  $lienItem = $CONF['upload_dir'].trNomFichierUp($fichier);


	  if(!file_exists_url($fichier))
	    {
	      throw new ListerException(404);
	    }
	  $lienItem = $fichier;
	}
      else
	{
	  $nomItem  = is_null($nomItem) ? trNomFichier($fichier['name']) : $nomItem;
	  $lienItem = $CONF['upload_dir'].trNomFichierUp($fichier['name']);

          // on traite les fichiers php a part pour des raisons de sécurité
          if(eregi('\.(php.?|phtml)$', $fichier['name']))
            {
              $lienItem = preg_replace('`\.'.trouveExtention($lienItem).'$`i','.phps',$lienItem);
            }   
      
          if(!@move_uploaded_file($fichier['tmp_name'], $lienItem))
            {
	      throw new ListerException(140+((int)$fichier['error']));
            }
	}
     

     
      $uploaded = true;
 
      $proprietaireItem = $_SESSION['LOGIN'];
    }

  if(is_null($id) || is_null($action))
    {
      throw new ListerException(15);
    }

  $droitsItem = 2; // car l'utilisateur créant l'item à bien tous les droits sur l'item
  $item = new Item($id, $nomItem, $lienItem, $proprietaireItem, $droitsItem, $tagsItem);
  
  // ajouter item
  if($action == 'ADD' && $uploaded)
    {
      $item->enregistrer();
      $nbrAction++;
    }
  
  // ajouter un tag
  if($action == 'ADD_TAG' && !is_null($nomTag))
    {
      // DROITS: ajouter un tag sur un item: si il a les droits sur cet item
      if(!$admin && $item->getDroits() <= 1)
	{
	  throw new ListerException(208, $item->getIdItem());
	}

      $item->ajouterTag($nomTag);
      $nbrAction++;
    }
  
  // supprimer un tag
  if($action == 'DEL_TAG' && !is_null($nomTag))
    {
      // DROITS: supprimer un tag d'un item: si il a les droits sur cet item
      if(!$admin && $item->getDroits() <= 1)
	{
	  throw new ListerException(209, $item->getIdItem());
	}

      $item->retirerTag($nomTag);
      $nbrAction++;
    }

  // changer l'etat d'un tag
  if($action == 'INV_TAG' && !is_null($nomTag))
    {
      // DROITS: changer l'etat d'un tag d'un item: si il a les droits sur cet item
      if(!$admin && $item->getDroits() <= 1)
	{
	  throw new ListerException(209, $item->getIdItem());
	}

      $item->invTag($nomTag);
      $nbrAction++;
    }
  
  // renommer un item
  if($action == 'UP_NOM' && !is_null($newNomItem))
    {
      // DROITS: renommer un item: si il a les droits sur cet item
      if(!$admin && $item->getDroits() <= 1)
	{
	  throw new ListerException(210, $item->getIdItem());
	}

      $item->renommer($newNomItem);
      $nbrAction++;
    }
  
  // changer les droits
  if($action == 'MOD_DROITS' && !is_null($valDroits) && !is_null($leLogin))
    {
      // DROITS: changer les droit de l'item: si il est proprietaire de cet item
      if(!$admin && !$item->isProprietaire($_SESSION['LOGIN']))
	{
	  throw new ListerException(211, $item->getIdItem());
	}

      $item->changerDroits($valDroits, $leLogin);
      $nbrAction++;
    }

  // rendre public/privé
  if($action == 'PUBLIC' && !is_null($valDroits) && !is_null($leLogin))
    {
      // DROITS: rendre public/privé l'item: si il est proprietaire de cet item
      if(!$admin && !$item->isProprietaire($_SESSION['LOGIN']))
	{
	  throw new ListerException(211, $item->getIdItem());
	}
      
      $item->changerPublic(($valDroits==1));
      $nbrAction++;
    }
  

  // supprimer item
  if($action == 'DEL')
    {
      // DROITS: supprimer un item: si il a les droits sur cet item
      if(!$admin && $item->getDroits() <=1)
	{
	  throw new ListerException(212, $item->getIdItem());
	}

      $item->supprimer();
      $nbrAction++;
    }

  if($nbrAction == 0) throw new ListerException(15);
  
  $ok = true;
  $template->assign_vars(array('OK' => 'ok'));
  $template->assign_vars(array('NOMBRE_ACTION' => $nbrAction));
  $template->assign_vars($item->returnArray());
}
catch(ListerException $e)
{
  $template->assign_vars($e->returnArray());
  $template->assign_vars(array('OK'  => 'err'));
}
?>
